home *** CD-ROM | disk | FTP | other *** search
/ Revista do CD-ROM 101 / CD-ROM 101.iso / compl / maya5ple / Install_MayaPLE5_English.exe / Maya / Data1.cab / stdlib.aws < prev    next >
Encoding:
Text File  |  2003-07-17  |  38.7 KB  |  1,052 lines

  1. // stdlib.aws
  2. //
  3.  
  4. //--------------------------------------------
  5. // Built-in operators.
  6. //
  7.  
  8. // operator+ for same types
  9. float operator+ (float f1, float f2);
  10. float2 operator+ (float2 v1, float2 v2);
  11. float3 operator+ (float3 v1, float3 v2);
  12. float4 operator+ (float4 v1, float4 v2);
  13. clampu operator+ (clampu c1, clampu c2);
  14. clampu2 operator+ (clampu2 c1, clampu2 c2);
  15. clampu3 operator+ (clampu3 c1, clampu3 c2);
  16. clampu4 operator+ (clampu4 c1, clampu4 c2);
  17. matrix2 operator+ (matrix2 m1, matrix2 m2);
  18. matrix3 operator+ (matrix3 m1, matrix3 m2);
  19. matrix4 operator+ (matrix4 m1, matrix4 m2);
  20.  
  21. // operator- for same types
  22. float operator- (float f1, float f2);
  23. float2 operator- (float2 v1, float2 v2);
  24. float3 operator- (float3 v1, float3 v2);
  25. float4 operator- (float4 v1, float4 v2);
  26. clampu operator- (clampu c1, clampu c2);
  27. clampu2 operator- (clampu2 c1, clampu2 c2);
  28. clampu3 operator- (clampu3 c1, clampu3 c2);
  29. clampu4 operator- (clampu4 c1, clampu4 c2);
  30. matrix2 operator- (matrix2 m1, matrix2 m2);
  31. matrix3 operator- (matrix3 m1, matrix3 m2);
  32. matrix4 operator- (matrix4 m1, matrix4 m2);
  33.  
  34. // operator* for same types
  35. float operator* (float f1, float f2);
  36. float2 operator* (float2 v1, float2 v2);
  37. float3 operator* (float3 v1, float3 v2);
  38. float4 operator* (float4 v1, float4 v2);
  39. clampu operator* (clampu c1, clampu c2);
  40. clampu2 operator* (clampu2 c1, clampu2 c2);
  41. clampu3 operator* (clampu3 c1, clampu3 c2);
  42. clampu4 operator* (clampu4 c1, clampu4 c2);
  43. matrix2 operator* (matrix2 m1, matrix2 m2);
  44. matrix3 operator* (matrix3 m1, matrix3 m2);
  45. matrix4 operator* (matrix4 m1, matrix4 m2);
  46.  
  47. // operator* by float (symetric)
  48. float2 operator* (float2 v, float f);
  49. float2 operator* (float f, float2 v);
  50. float3 operator* (float3 v, float f);
  51. float3 operator* (float f, float3 v);
  52. float4 operator* (float4 v, float f);
  53. float4 operator* (float f, float4 v);
  54. // clampu?
  55. matrix2 operator* (matrix2 m1, float f);
  56. matrix2 operator* (float f, matrix2 m1);
  57. matrix3 operator* (matrix3 m1, float f);
  58. matrix3 operator* (float f, matrix3 m1);
  59. matrix4 operator* (matrix4 m1, float f);
  60. matrix4 operator* (float f, matrix4 m1);
  61.  
  62. // Matrix by vector multiplies.
  63. float4 operator* (matrix4 m, float4 v);
  64. float3 operator* (matrix3 m, float3 v);
  65. float2 operator* (matrix2 m, float2 v);
  66.  
  67. // operator/ for same types
  68. float operator/ (float f1, float f2);
  69. float2 operator/ (float2 v1, float2 v2);
  70. float3 operator/ (float3 v1, float3 v2);
  71. float4 operator/ (float4 v1, float4 v2);
  72. clampu operator/ (clampu c1, clampu c2);
  73. clampu2 operator/ (clampu2 c1, clampu2 c2);
  74. clampu3 operator/ (clampu3 c1, clampu3 c2);
  75. clampu4 operator/ (clampu4 c1, clampu4 c2);
  76. matrix2 operator/ (matrix2 m1, matrix2 m2);
  77. matrix3 operator/ (matrix3 m1, matrix3 m2);
  78. matrix4 operator/ (matrix4 m1, matrix4 m2);
  79.  
  80. // operator/ by float (right-side only)
  81. float2 operator/ (float2 v, float f);
  82. float3 operator/ (float3 v, float f);
  83. float4 operator/ (float4 v, float f);
  84. // clampu?
  85. matrix2 operator/ (matrix2 m1, float f);
  86. matrix3 operator/ (matrix3 m1, float f);
  87. matrix4 operator/ (matrix4 m1, float f);
  88.  
  89. // operator% for same types
  90. float operator% (float f1, float f2);
  91. float2 operator% (float2 v1, float2 v2);
  92. float3 operator% (float3 v1, float3 v2);
  93. float4 operator% (float4 v1, float4 v2);
  94. clampu operator% (clampu c1, clampu c2);
  95. clampu2 operator% (clampu2 c1, clampu2 c2);
  96. clampu3 operator% (clampu3 c1, clampu3 c2);
  97. clampu4 operator% (clampu4 c1, clampu4 c2);
  98. matrix2 operator% (matrix2 m1, matrix2 m2);
  99. matrix3 operator% (matrix3 m1, matrix3 m2);
  100. matrix4 operator% (matrix4 m1, matrix4 m2);
  101.  
  102. // operator% by float (right-side only)
  103. float2 operator% (float2 v, float f);
  104. float3 operator% (float3 v, float f);
  105. float4 operator% (float4 v, float f);
  106. // clampu?
  107. matrix2 operator% (matrix2 m1, float f);
  108. matrix3 operator% (matrix3 m1, float f);
  109. matrix4 operator% (matrix4 m1, float f);
  110.  
  111. // Swizzle operator
  112. float  operator@ (float  i, constant int  s);
  113. float  operator@ (float2 i, constant int  s);
  114. float  operator@ (float3 i, constant int  s);
  115. float  operator@ (float4 i, constant int  s);
  116. float2 operator@ (float  i, constant int2 s);
  117. float2 operator@ (float2 i, constant int2 s);
  118. float2 operator@ (float3 i, constant int2 s);
  119. float2 operator@ (float4 i, constant int2 s);
  120. float3 operator@ (float  i, constant int3 s);
  121. float3 operator@ (float2 i, constant int3 s);
  122. float3 operator@ (float3 i, constant int3 s);
  123. float3 operator@ (float4 i, constant int3 s);
  124. float4 operator@ (float  i, constant int4 s);
  125. float4 operator@ (float2 i, constant int4 s);
  126. float4 operator@ (float3 i, constant int4 s);
  127. float4 operator@ (float4 i, constant int4 s);
  128. clampu  operator@ (clampu  i, constant int  s);
  129. clampu  operator@ (clampu2 i, constant int  s);
  130. clampu  operator@ (clampu3 i, constant int  s);
  131. clampu  operator@ (clampu4 i, constant int  s);
  132. clampu2 operator@ (clampu  i, constant int2 s);
  133. clampu2 operator@ (clampu2 i, constant int2 s);
  134. clampu2 operator@ (clampu3 i, constant int2 s);
  135. clampu2 operator@ (clampu4 i, constant int2 s);
  136. clampu3 operator@ (clampu  i, constant int3 s);
  137. clampu3 operator@ (clampu2 i, constant int3 s);
  138. clampu3 operator@ (clampu3 i, constant int3 s);
  139. clampu3 operator@ (clampu4 i, constant int3 s);
  140. clampu4 operator@ (clampu  i, constant int4 s);
  141. clampu4 operator@ (clampu2 i, constant int4 s);
  142. clampu4 operator@ (clampu3 i, constant int4 s);
  143. clampu4 operator@ (clampu4 i, constant int4 s);
  144.  
  145.  
  146. // Conditional operators
  147. bool operator== (float a, float b);
  148. bool operator!= (float a, float b);
  149. bool operator>  (float a, float b);
  150. bool operator<  (float a, float b);
  151. bool operator>= (float a, float b);
  152. bool operator<= (float a, float b);
  153.  
  154. bool operator== (clampu a, clampu b);
  155. bool operator!= (clampu a, clampu b);
  156. bool operator>  (clampu a, clampu b);
  157. bool operator<  (clampu a, clampu b);
  158. bool operator>= (clampu a, clampu b);
  159. bool operator<= (clampu a, clampu b);
  160.  
  161. bool operator&& (bool a, bool b);
  162. bool operator|| (bool a, bool b);
  163.  
  164. // Computation-frequency promotion typecast operators.
  165. fragment bool     operator fragment(bool i);
  166. fragment float     operator fragment(float i);
  167. fragment float2     operator fragment(float2 i);
  168. fragment float3     operator fragment(float3 i);
  169. fragment float4     operator fragment(float4 i);
  170. fragment float     operator fragment(float i);
  171. fragment float2     operator fragment(float2 i);
  172. fragment float3     operator fragment(float3 i);
  173. fragment float4     operator fragment(float4 i);
  174. fragment matrix2 operator fragment(matrix2 i);
  175. fragment matrix3 operator fragment(matrix3 i);
  176. fragment matrix4 operator fragment(matrix4 i);
  177.  
  178. vertex bool        operator vertex(constant:vertex bool i);
  179. vertex float    operator vertex(constant:vertex float i);
  180. vertex float2    operator vertex(constant:vertex float2 i);
  181. vertex float3    operator vertex(constant:vertex float3 i);
  182. vertex float4    operator vertex(constant:vertex float4 i);
  183. vertex float    operator vertex(constant:vertex float i);
  184. vertex float2    operator vertex(constant:vertex float2 i);
  185. vertex float3    operator vertex(constant:vertex float3 i);
  186. vertex float4    operator vertex(constant:vertex float4 i);
  187. vertex matrix2    operator vertex(constant:vertex matrix2 i);
  188. vertex matrix3    operator vertex(constant:vertex matrix3 i);
  189. vertex matrix4    operator vertex(constant:vertex matrix4 i);
  190.  
  191.  
  192. // Selection operator. Equivalent to "predicate ? a : b".
  193. bool    select(bool p, bool a,      bool b);
  194. float    select(bool p, float a,      float b);
  195. float2    select(bool p, float2 a,  float2 b);
  196. float3    select(bool p, float3 a,  float3 b);
  197. float4    select(bool p, float4 a,  float4 b);
  198. clampu    select(bool p, clampu a,  clampu b);
  199. clampu2    select(bool p, clampu2 a, clampu2 b);
  200. clampu3    select(bool p, clampu3 a, clampu3 b);
  201. clampu4    select(bool p, clampu4 a, clampu4 b);
  202. matrix2 select(bool p, matrix2 a, matrix2 b);
  203. matrix3 select(bool p, matrix3 a, matrix3 b);
  204. matrix4 select(bool p, matrix4 a, matrix4 b);
  205. uniform texobj select(bool p, uniform texobj a,  uniform texobj b);
  206.  
  207. // Absolute value
  208. float  abs(float a);
  209. float2 abs(float2 a);
  210. float3 abs(float3 a);
  211. float4 abs(float4 a);
  212. clampu  abs(clampu a);
  213. clampu2 abs(clampu2 a);
  214. clampu3 abs(clampu3 a);
  215. clampu4 abs(clampu4 a);
  216.  
  217.  
  218.  
  219.  
  220.  
  221. // START BIG SECTION
  222. float  acos( float a );
  223. float2 acos( float2 a );
  224. float3 acos( float3 a );
  225. float4 acos( float4 a );
  226. clampu  acos( clampu a );
  227. clampu2 acos( clampu2 a );
  228. clampu3 acos( clampu3 a );
  229. clampu4 acos( clampu4 a );
  230.  
  231. float  asin( float a );
  232. float2 asin( float2 a );
  233. float3 asin( float3 a );
  234. float4 asin( float4 a );
  235. clampu  asin( clampu a );
  236. clampu2 asin( clampu2 a );
  237. clampu3 asin( clampu3 a );
  238. clampu4 asin( clampu4 a );
  239.  
  240. float  atan( float x );
  241. float2 atan( float2 x );
  242. float3 atan( float3 x );
  243. float4 atan( float4 x );
  244. clampu  atan( clampu x );
  245. clampu2 atan( clampu2 x );
  246. clampu3 atan( clampu3 x );
  247. clampu4 atan( clampu4 x );
  248.  
  249. float  atan2( float y, float x );
  250. float2 atan2( float2 y, float2 x );
  251. float3 atan2( float3 y, float3 x );
  252. float4 atan2( float4 y, float4 x );
  253. clampu  atan2( clampu y, clampu x );
  254. clampu2 atan2( clampu2 y, clampu2 x );
  255. clampu3 atan2( clampu3 y, clampu3 x );
  256. clampu4 atan2( clampu4 y, clampu4 x );
  257.  
  258. float  ceil( float a );
  259. float2 ceil( float2 a );
  260. float3 ceil( float3 a );
  261. float4 ceil( float4 a );
  262. clampu  ceil( clampu a );
  263. clampu2 ceil( clampu2 a );
  264. clampu3 ceil( clampu3 a );
  265. clampu4 ceil( clampu4 a );
  266.  
  267. float  clamp( float x, float a, float b );
  268. float2 clamp( float2 x, float2 a, float2 b );
  269. float3 clamp( float3 x, float3 a, float3 b );
  270. float4 clamp( float4 x, float4 a, float4 b );
  271. clampu  clamp( clampu x, clampu a, clampu b );
  272. clampu2 clamp( clampu2 x, clampu2 a, clampu2 b );
  273. clampu3 clamp( clampu3 x, clampu3 a, clampu3 b );
  274. clampu4 clamp( clampu4 x, clampu4 a, clampu4 b );
  275.  
  276. float  cos( float a );
  277. float2 cos( float2 a );
  278. float3 cos( float3 a );
  279. float4 cos( float4 a );
  280. clampu  cos( clampu a );
  281. clampu2 cos( clampu2 a );
  282. clampu3 cos( clampu3 a );
  283. clampu4 cos( clampu4 a );
  284.  
  285. float  cosh( float a );
  286. float2 cosh( float2 a );
  287. float3 cosh( float3 a );
  288. float4 cosh( float4 a );
  289. clampu  cosh( clampu a );
  290. clampu2 cosh( clampu2 a );
  291. clampu3 cosh( clampu3 a );
  292. clampu4 cosh( clampu4 a );
  293.  
  294. float3 cross( float3 a, float3 b );
  295. clampu3 cross( clampu3 a, clampu3 b );
  296.  
  297. float  ddx( float a );
  298. float2 ddx( float2 a );
  299. float3 ddx( float3 a );
  300. float4 ddx( float4 a );
  301. clampu  ddx( clampu a );
  302. clampu2 ddx( clampu2 a );
  303. clampu3 ddx( clampu3 a );
  304. clampu4 ddx( clampu4 a );
  305.  
  306. float  ddy( float a );
  307. float2 ddy( float2 a );
  308. float3 ddy( float3 a );
  309. float4 ddy( float4 a );
  310. clampu  ddy( clampu a );
  311. clampu2 ddy( clampu2 a );
  312. clampu3 ddy( clampu3 a );
  313. clampu4 ddy( clampu4 a );
  314.  
  315. float  degrees( float a );
  316. float2 degrees( float2 a );
  317. float3 degrees( float3 a );
  318. float4 degrees( float4 a );
  319. clampu  degrees( clampu a );
  320. clampu2 degrees( clampu2 a );
  321. clampu3 degrees( clampu3 a );
  322. clampu4 degrees( clampu4 a );
  323.  
  324. float  dot( float2 a, float2 b );
  325. float  dot( float3 a, float3 b );
  326. float  dot( float4 a, float4 b );
  327. clampu  dot( clampu2 a, clampu2 b );
  328. clampu  dot( clampu3 a, clampu3 b );
  329. clampu  dot( clampu4 a, clampu4 b );
  330.  
  331. float  exp( float x );
  332. float2 exp( float2 x );
  333. float3 exp( float3 x );
  334. float4 exp( float4 x );
  335. clampu  exp( clampu x );
  336. clampu2 exp( clampu2 x );
  337. clampu3 exp( clampu3 x );
  338. clampu4 exp( clampu4 x );
  339.  
  340. float  exp2( float x );
  341. float2 exp2( float2 x );
  342. float3 exp2( float3 x );
  343. float4 exp2( float4 x );
  344. clampu  exp2( clampu x );
  345. clampu2 exp2( clampu2 x );
  346. clampu3 exp2( clampu3 x );
  347. clampu4 exp2( clampu4 x );
  348.  
  349. float  floor( float x );
  350. float2 floor( float2 x );
  351. float3 floor( float3 x );
  352. float4 floor( float4 x );
  353. clampu  floor( clampu x );
  354. clampu2 floor( clampu2 x );
  355. clampu3 floor( clampu3 x );
  356. clampu4 floor( clampu4 x );
  357.  
  358. float  fmod( float a, float b );
  359. float2 fmod( float2 a, float2 b );
  360. float3 fmod( float3 a, float3 b );
  361. float4 fmod( float4 a, float4 b );
  362. clampu  fmod( clampu a, clampu b );
  363. clampu2 fmod( clampu2 a, clampu2 b );
  364. clampu3 fmod( clampu3 a, clampu3 b );
  365. clampu4 fmod( clampu4 a, clampu4 b );
  366.  
  367. float  frexp( float x, out float expon );
  368. float2 frexp( float2 x, out float2 expon );
  369. float3 frexp( float3 x, out float3 expon );
  370. float4 frexp( float4 x, out float4 expon );
  371. clampu  frexp( clampu x, out clampu expon );
  372. clampu2 frexp( clampu2 x, out clampu2 expon );
  373. clampu3 frexp( clampu3 x, out clampu3 expon );
  374. clampu4 frexp( clampu4 x, out clampu4 expon );
  375.  
  376. float  frac( float x );
  377. float2 frac( float2 x );
  378. float3 frac( float3 x );
  379. float4 frac( float4 x );
  380. clampu  frac( clampu x );
  381. clampu2 frac( clampu2 x );
  382. clampu3 frac( clampu3 x );
  383. clampu4 frac( clampu4 x );
  384.  
  385.  
  386. // [claforte] Hum... not sure yet if we want those.
  387. // bool   isfinite( float a );
  388. // bool2  isfinite( float2 a );
  389. // bool3  isfinite( float3 a );
  390. // bool4  isfinite( float4 a );
  391. // 
  392. // bool   isfinite( clampu a );
  393. // bool2  isfinite( clampu2 a );
  394. // bool3  isfinite( clampu3 a );
  395. // bool4  isfinite( clampu4 a );
  396. // 
  397. // bool   isinf( float a );
  398. // bool2  isinf( float2 a );
  399. // bool3  isinf( float3 a );
  400. // bool4  isinf( float4 a );
  401. // bool   isinf( clampu a );
  402. // bool2  isinf( clampu2 a );
  403. // bool3  isinf( clampu3 a );
  404. // bool4  isinf( clampu4 a );
  405. // 
  406. // bool   isnan( float a );
  407. // bool2  isnan( float2 a );
  408. // bool3  isnan( float3 a );
  409. // bool4  isnan( float4 a );
  410. // bool   isnan( clampu a );
  411. // bool2  isnan( clampu2 a );
  412. // bool3  isnan( clampu3 a );
  413. // bool4  isnan( clampu4 a );
  414.  
  415.  
  416. float  ldexp( float x, float n );
  417. float2 ldexp( float2 x, float2 n );
  418. float3 ldexp( float3 x, float3 n );
  419. float4 ldexp( float4 x, float4 n );
  420. clampu  ldexp( clampu x, clampu n );
  421. clampu2 ldexp( clampu2 x, clampu2 n );
  422. clampu3 ldexp( clampu3 x, clampu3 n );
  423. clampu4 ldexp( clampu4 x, clampu4 n );
  424.  
  425. float  log( float x );
  426. float2 log( float2 x );
  427. float3 log( float3 x );
  428. float4 log( float4 x );
  429. clampu  log( clampu x );
  430. clampu2 log( clampu2 x );
  431. clampu3 log( clampu3 x );
  432. clampu4 log( clampu4 x );
  433.  
  434. float  log( float b, float x );
  435. float2 log( float2 b, float2 x );
  436. float3 log( float3 b, float3 x );
  437. float4 log( float4 b, float4 x );
  438. clampu  log( clampu b, clampu x );
  439. clampu2 log( clampu2 b, clampu2 x );
  440. clampu3 log( clampu3 b, clampu3 x );
  441. clampu4 log( clampu4 b, clampu4 x );
  442.  
  443. float  log2( float x );
  444. float2 log2( float2 x );
  445. float3 log2( float3 x );
  446. float4 log2( float4 x );
  447. clampu  log2( clampu x );
  448. clampu2 log2( clampu2 x );
  449. clampu3 log2( clampu3 x );
  450. clampu4 log2( clampu4 x );
  451.  
  452. float  log10( float x );
  453. float2 log10( float2 x );
  454. float3 log10( float3 x );
  455. float4 log10( float4 x );
  456. clampu  log10( clampu x );
  457. clampu2 log10( clampu2 x );
  458. clampu3 log10( clampu3 x );
  459. clampu4 log10( clampu4 x );
  460.  
  461. float  max( float a, float b );
  462. float2 max( float2 a, float2 b );
  463. float3 max( float3 a, float3 b );
  464. float4 max( float4 a, float4 b );
  465. clampu  max( clampu a, clampu b );
  466. clampu2 max( clampu2 a, clampu2 b );
  467. clampu3 max( clampu3 a, clampu3 b );
  468. clampu4 max( clampu4 a, clampu4 b );
  469.  
  470. float  min( float a, float b );
  471. float2 min( float2 a, float2 b );
  472. float3 min( float3 a, float3 b );
  473. float4 min( float4 a, float4 b );
  474. clampu  min( clampu a, clampu b );
  475. clampu2 min( clampu2 a, clampu2 b );
  476. clampu3 min( clampu3 a, clampu3 b );
  477. clampu4 min( clampu4 a, clampu4 b );
  478.  
  479. // [claforte] Some of these should probably be complex.
  480. float  mix( float a, float b, float frac );
  481. float2 mix( float2 a, float2 b, float frac );
  482. float3 mix( float3 a, float3 b, float frac );
  483. float4 mix( float4 a, float4 b, float frac );
  484. float2 mix( float2 a, float2 b, float2 frac );
  485. float3 mix( float3 a, float3 b, float3 frac );
  486. float4 mix( float4 a, float4 b, float4 frac );
  487. clampu  mix( clampu a, clampu b, clampu frac );
  488. clampu2 mix( clampu2 a, clampu2 b, clampu frac );
  489. clampu3 mix( clampu3 a, clampu3 b, clampu frac );
  490. clampu4 mix( clampu4 a, clampu4 b, clampu frac );
  491. clampu2 mix( clampu2 a, clampu2 b, clampu2 frac );
  492. clampu3 mix( clampu3 a, clampu3 b, clampu3 frac );
  493. clampu4 mix( clampu4 a, clampu4 b, clampu4 frac );
  494.  
  495. //  [claforte] Should we support those?
  496. // float  modf( float x, out float ip );
  497. // float2 modf( float2 x, out float2 ip );
  498. // float3 modf( float3 x, out float3 ip );
  499. // float4 modf( float4 x, out float4 ip );
  500. // clampu  modf( clampu x, out clampu ip );
  501. // clampu2 modf( clampu2 x, out clampu2 ip );
  502. // clampu3 modf( clampu3 x, out clampu3 ip );
  503. // clampu4 modf( clampu4 x, out clampu4 ip );
  504.  
  505.  
  506. // [claforte] Should probably be complex.
  507. float  noise( float x );
  508. float  noise( float x, float y );
  509. float  noise( float x, float y, float z );
  510. float  noise( float2 x );
  511. float  noise( float3 x );
  512. clampu  noise( clampu x );
  513. clampu  noise( clampu x, clampu y );
  514. clampu  noise( clampu x, clampu y, clampu z );
  515. clampu  noise( clampu2 x );
  516. clampu  noise( clampu3 x );
  517.  
  518. float  pow( float x, float y );
  519. float2 pow( float2 x, float2 y );
  520. float3 pow( float3 x, float3 y );
  521. float4 pow( float4 x, float4 y );
  522. clampu  pow( clampu x, clampu y );
  523. clampu2 pow( clampu2 x, clampu2 y );
  524. clampu3 pow( clampu3 x, clampu3 y );
  525. clampu4 pow( clampu4 x, clampu4 y );
  526.  
  527. float  radians( float a );
  528. float2 radians( float2 a );
  529. float3 radians( float3 a );
  530. float4 radians( float4 a );
  531. clampu  radians( clampu a );
  532. clampu2 radians( clampu2 a );
  533. clampu3 radians( clampu3 a );
  534. clampu4 radians( clampu4 a );
  535.  
  536. float  round( float a );
  537. float2 round( float2 a );
  538. float3 round( float3 a );
  539. float4 round( float4 a );
  540. clampu  round( clampu a );
  541. clampu2 round( clampu2 a );
  542. clampu3 round( clampu3 a );
  543. clampu4 round( clampu4 a );
  544.  
  545. float  rsqrt( float x );
  546. float2 rsqrt( float2 x );
  547. float3 rsqrt( float3 x );
  548. float4 rsqrt( float4 x );
  549. clampu  rsqrt( clampu x );
  550. clampu2 rsqrt( clampu2 x );
  551. clampu3 rsqrt( clampu3 x );
  552. clampu4 rsqrt( clampu4 x );
  553.  
  554. float  sign( float a );
  555. float2 sign( float2 a );
  556. float3 sign( float3 a );
  557. float4 sign( float4 a );
  558. clampu  sign( clampu a );
  559. clampu2 sign( clampu2 a );
  560. clampu3 sign( clampu3 a );
  561. clampu4 sign( clampu4 a );
  562.  
  563. float  sin( float a );
  564. float2 sin( float2 a );
  565. float3 sin( float3 a );
  566. float4 sin( float4 a );
  567. clampu  sin( clampu a );
  568. clampu2 sin( clampu2 a );
  569. clampu3 sin( clampu3 a );
  570. clampu4 sin( clampu4 a );
  571.  
  572. float  sinh( float a );
  573. float2 sinh( float2 a );
  574. float3 sinh( float3 a );
  575. float4 sinh( float4 a );
  576. clampu  sinh( clampu a );
  577. clampu2 sinh( clampu2 a );
  578. clampu3 sinh( clampu3 a );
  579. clampu4 sinh( clampu4 a );
  580.  
  581. float  smoothstep( float a, float b, float x );
  582. float2 smoothstep( float2 a, float2 b, float2 x );
  583. float3 smoothstep( float3 a, float3 b, float3 x );
  584. float4 smoothstep( float4 a, float4 b, float4 x );
  585. clampu  smoothstep( clampu a, clampu b, clampu x );
  586. clampu2 smoothstep( clampu2 a, clampu2 b, clampu2 x );
  587. clampu3 smoothstep( clampu3 a, clampu3 b, clampu3 x );
  588. clampu4 smoothstep( clampu4 a, clampu4 b, clampu4 x );
  589.  
  590. float  step( float a, float x );
  591. float2 step( float2 a, float2 x );
  592. float3 step( float3 a, float3 x );
  593. float4 step( float4 a, float4 x );
  594. clampu  step( clampu a, clampu x );
  595. clampu2 step( clampu2 a, clampu2 x );
  596. clampu3 step( clampu3 a, clampu3 x );
  597. clampu4 step( clampu4 a, clampu4 x );
  598.  
  599. float  sqrt( float a );
  600. float2 sqrt( float2 a );
  601. float3 sqrt( float3 a );
  602. float4 sqrt( float4 a );
  603. clampu  sqrt( clampu a );
  604. clampu2 sqrt( clampu2 a );
  605. clampu3 sqrt( clampu3 a );
  606. clampu4 sqrt( clampu4 a );
  607.  
  608. float  tan( float a );
  609. float2 tan( float2 a );
  610. float3 tan( float3 a );
  611. float4 tan( float4 a );
  612. clampu  tan( clampu a );
  613. clampu2 tan( clampu2 a );
  614. clampu3 tan( clampu3 a );
  615. clampu4 tan( clampu4 a );
  616.  
  617. float  tanh( float a );
  618. float2 tanh( float2 a );
  619. float3 tanh( float3 a );
  620. float4 tanh( float4 a );
  621. clampu  tanh( clampu a );
  622. clampu2 tanh( clampu2 a );
  623. clampu3 tanh( clampu3 a );
  624. clampu4 tanh( clampu4 a );
  625.  
  626.  
  627. // Geometrical Prototypes
  628. float distance( float2 pt1, float2 pt2 );
  629. float distance( float3 pt1, float3 pt2 );
  630. float distance( float4 pt1, float4 pt2 );
  631. clampu distance( clampu2 pt1, clampu2 pt2 );
  632. clampu distance( clampu3 pt1, clampu3 pt2 );
  633. clampu distance( clampu4 pt1, clampu4 pt2 );
  634.  
  635. // [claforte] Should be complex.
  636. float fresnel( float3 i, float3 n, float eta );
  637. float fresnel( float3 i, float3 n, float eta, out float kt );
  638. float fresnel( float3 i, float3 n, float eta, out float kt, out float3 r, out float3 t );
  639. float fresnel( float3 i, float3 n, float eta, out float3 r, out float3 t );
  640. clampu fresnel( clampu3 i, clampu3 n, clampu eta );
  641. clampu fresnel( clampu3 i, clampu3 n, clampu eta, out clampu kt );
  642. clampu fresnel( clampu3 i, clampu3 n, clampu eta, out clampu kt, out clampu3 r, out clampu3 t );
  643. clampu fresnel( clampu3 i, clampu3 n, clampu eta, out clampu3 r, out clampu3 t );
  644.  
  645. // [claforte] Should be complex.
  646. float length( float2 v );
  647. float length( float3 v );
  648. float length( float4 v );
  649. clampu length( clampu2 v );
  650. clampu length( clampu3 v );
  651. clampu length( clampu4 v );
  652.  
  653. float2 normalize( float2 v );
  654. float3 normalize( float3 v );
  655. float4 normalize( float4 v );
  656. clampu2 normalize( clampu2 v );
  657. clampu3 normalize( clampu3 v );
  658. clampu4 normalize( clampu4 v );
  659.  
  660. // Normalize and return the length at the same time.
  661. float2 normalize( float2 v, out float length );
  662. float3 normalize( float3 v, out float length );
  663. float4 normalize( float4 v, out float length );
  664. clampu2 normalize( clampu2 v, out float length );
  665. clampu3 normalize( clampu3 v, out float length );
  666. clampu4 normalize( clampu4 v, out float length );
  667.  
  668. float3 reflect( float3 i, float3 n );
  669. float3 reflectn( float3 i, float3 n );
  670. clampu3 reflect( clampu3 i, clampu3 n );
  671. clampu3 reflectn( clampu3 i, clampu3 n );
  672.  
  673. float3 refract( float3 i, float3 n );
  674. float3 refractn( float3 i, float3 n );
  675. clampu3 refract( clampu3 i, clampu3 n );
  676. clampu3 refractn( clampu3 i, clampu3 n );
  677.  
  678.  
  679. // Texture functions
  680. fragment float  f1tex1D(uniform texobj tex, float s);                              // 1D non-projective
  681. fragment float2 f2tex1D(uniform texobj tex, float s);                              // 1D non-projective
  682. fragment float3 f3tex1D(uniform texobj tex, float s);                              // 1D non-projective
  683. fragment float4 f4tex1D(uniform texobj tex, float s);                              // 1D non-projective
  684. fragment clampu  x1tex1D(uniform texobj tex, float s);                              // 1D non-projective
  685. fragment clampu2 x2tex1D(uniform texobj tex, float s);                              // 1D non-projective
  686. fragment clampu3 x3tex1D(uniform texobj tex, float s);                              // 1D non-projective
  687. fragment clampu4 x4tex1D(uniform texobj tex, float s);                              // 1D non-projective
  688.  
  689. fragment float  f1tex1D(uniform texobj tex, float2 sq);                            // 1D projective
  690. fragment float2 f2tex1D(uniform texobj tex, float2 sq);                            // 1D projective
  691. fragment float3 f3tex1D(uniform texobj tex, float2 sq);                            // 1D projective
  692. fragment float4 f4tex1D(uniform texobj tex, float2 sq);                            // 1D projective
  693. fragment clampu  x1tex1D(uniform texobj tex, float2 sq);                            // 1D projective
  694. fragment clampu2 x2tex1D(uniform texobj tex, float2 sq);                            // 1D projective
  695. fragment clampu3 x3tex1D(uniform texobj tex, float2 sq);                            // 1D projective
  696. fragment clampu4 x4tex1D(uniform texobj tex, float2 sq);                            // 1D projective
  697.  
  698. fragment float  f1tex1D(uniform texobj tex, float s, float dsdx, float dsdy);      // 1D non-proj, w/derivs
  699. fragment float2 f2tex1D(uniform texobj tex, float s, float dsdx, float dsdy);      // 1D non-proj, w/derivs
  700. fragment float3 f3tex1D(uniform texobj tex, float s, float dsdx, float dsdy);      // 1D non-proj, w/derivs
  701. fragment float4 f4tex1D(uniform texobj tex, float s, float dsdx, float dsdy);      // 1D non-proj, w/derivs
  702. fragment clampu  x1tex1D(uniform texobj tex, float s, float dsdx, float dsdy);      // 1D non-proj, w/derivs
  703. fragment clampu2 x2tex1D(uniform texobj tex, float s, float dsdx, float dsdy);      // 1D non-proj, w/derivs
  704. fragment clampu3 x3tex1D(uniform texobj tex, float s, float dsdx, float dsdy);      // 1D non-proj, w/derivs
  705. fragment clampu4 x4tex1D(uniform texobj tex, float s, float dsdx, float dsdy);      // 1D non-proj, w/derivs
  706.  
  707. fragment float  f1tex2D(uniform texobj tex, float2 s);                             // 2D non-projective
  708. fragment float2 f2tex2D(uniform texobj tex, float2 s);                             // 2D non-projective
  709. fragment float3 f3tex2D(uniform texobj tex, float2 s);                             // 2D non-projective
  710. fragment float4 f4tex2D(uniform texobj tex, float2 s);                             // 2D non-projective
  711. fragment clampu  x1tex2D(uniform texobj tex, float2 s);                             // 2D non-projective
  712. fragment clampu2 x2tex2D(uniform texobj tex, float2 s);                             // 2D non-projective
  713. fragment clampu3 x3tex2D(uniform texobj tex, float2 s);                             // 2D non-projective
  714. fragment clampu4 x4tex2D(uniform texobj tex, float2 s);                             // 2D non-projective
  715.  
  716. fragment float  f1tex2D(uniform texobj tex, float3 sq);                            // 2D projective
  717. fragment float2 f2tex2D(uniform texobj tex, float3 sq);                            // 2D projective
  718. fragment float3 f3tex2D(uniform texobj tex, float3 sq);                            // 2D projective
  719. fragment float4 f4tex2D(uniform texobj tex, float3 sq);                            // 2D projective
  720. fragment clampu  x1tex2D(uniform texobj tex, float3 sq);                            // 2D projective
  721. fragment clampu2 x2tex2D(uniform texobj tex, float3 sq);                            // 2D projective
  722. fragment clampu3 x3tex2D(uniform texobj tex, float3 sq);                            // 2D projective
  723. fragment clampu4 x4tex2D(uniform texobj tex, float3 sq);                            // 2D projective
  724.  
  725. fragment float  f1tex2D(uniform texobj tex, float2 s, float2 dsdx, float2 dsdy);   // 2D non-proj, w/derivs
  726. fragment float2 f2tex2D(uniform texobj tex, float2 s, float2 dsdx, float2 dsdy);   // 2D non-proj, w/derivs
  727. fragment float3 f3tex2D(uniform texobj tex, float2 s, float2 dsdx, float2 dsdy);   // 2D non-proj, w/derivs
  728. fragment float4 f4tex2D(uniform texobj tex, float2 s, float2 dsdx, float2 dsdy);   // 2D non-proj, w/derivs
  729. fragment clampu  x1tex2D(uniform texobj tex, float2 s, float2 dsdx, float2 dsdy);   // 2D non-proj, w/derivs
  730. fragment clampu2 x2tex2D(uniform texobj tex, float2 s, float2 dsdx, float2 dsdy);   // 2D non-proj, w/derivs
  731. fragment clampu3 x3tex2D(uniform texobj tex, float2 s, float2 dsdx, float2 dsdy);   // 2D non-proj, w/derivs
  732. fragment clampu4 x4tex2D(uniform texobj tex, float2 s, float2 dsdx, float2 dsdy);   // 2D non-proj, w/derivs
  733.  
  734. fragment float  f1tex3D(uniform texobj tex, float3 s);                             // 3D non-projective
  735. fragment float2 f2tex3D(uniform texobj tex, float3 s);                             // 3D non-projective
  736. fragment float3 f3tex3D(uniform texobj tex, float3 s);                             // 3D non-projective
  737. fragment float4 f4tex3D(uniform texobj tex, float3 s);                             // 3D non-projective
  738. fragment clampu  x1tex3D(uniform texobj tex, float3 s);                             // 3D non-projective
  739. fragment clampu2 x2tex3D(uniform texobj tex, float3 s);                             // 3D non-projective
  740. fragment clampu3 x3tex3D(uniform texobj tex, float3 s);                             // 3D non-projective
  741. fragment clampu4 x4tex3D(uniform texobj tex, float3 s);                             // 3D non-projective
  742.  
  743. fragment float  f1tex3D(uniform texobj tex, float4 sq);                            // 3D projective
  744. fragment float2 f2tex3D(uniform texobj tex, float4 sq);                            // 3D projective
  745. fragment float3 f3tex3D(uniform texobj tex, float4 sq);                            // 3D projective
  746. fragment float4 f4tex3D(uniform texobj tex, float4 sq);                            // 3D projective
  747. fragment clampu  x1tex3D(uniform texobj tex, float4 sq);                            // 3D projective
  748. fragment clampu2 x2tex3D(uniform texobj tex, float4 sq);                            // 3D projective
  749. fragment clampu3 x3tex3D(uniform texobj tex, float4 sq);                            // 3D projective
  750. fragment clampu4 x4tex3D(uniform texobj tex, float4 sq);                            // 3D projective
  751.  
  752. fragment float  f1tex3D(uniform texobj tex, float3 s, float3 dsdx, float3 dsdy);   // 3D non-proj, w/derivs
  753. fragment float2 f2tex3D(uniform texobj tex, float3 s, float3 dsdx, float3 dsdy);   // 3D non-proj, w/derivs
  754. fragment float3 f3tex3D(uniform texobj tex, float3 s, float3 dsdx, float3 dsdy);   // 3D non-proj, w/derivs
  755. fragment float4 f4tex3D(uniform texobj tex, float3 s, float3 dsdx, float3 dsdy);   // 3D non-proj, w/derivs
  756. fragment clampu  x1tex3D(uniform texobj tex, float3 s, float3 dsdx, float3 dsdy);   // 3D non-proj, w/derivs
  757. fragment clampu2 x2tex3D(uniform texobj tex, float3 s, float3 dsdx, float3 dsdy);   // 3D non-proj, w/derivs
  758. fragment clampu3 x3tex3D(uniform texobj tex, float3 s, float3 dsdx, float3 dsdy);   // 3D non-proj, w/derivs
  759. fragment clampu4 x4tex3D(uniform texobj tex, float3 s, float3 dsdx, float3 dsdy);   // 3D non-proj, w/derivs
  760.  
  761. fragment float  f1texCUBE(uniform texobj tex, float3 s);                           // CUBE non-projective
  762. fragment float2 f2texCUBE(uniform texobj tex, float3 s);                           // CUBE non-projective
  763. fragment float3 f3texCUBE(uniform texobj tex, float3 s);                           // CUBE non-projective
  764. fragment float4 f4texCUBE(uniform texobj tex, float3 s);                           // CUBE non-projective
  765. fragment clampu  x1texCUBE(uniform texobj tex, float3 s);                           // CUBE non-projective
  766. fragment clampu2 x2texCUBE(uniform texobj tex, float3 s);                           // CUBE non-projective
  767. fragment clampu3 x3texCUBE(uniform texobj tex, float3 s);                           // CUBE non-projective
  768. fragment clampu4 x4texCUBE(uniform texobj tex, float3 s);                           // CUBE non-projective
  769.  
  770. fragment float  f1texCUBE(uniform texobj tex, float4 sq);                          // CUBE projective
  771. fragment float2 f2texCUBE(uniform texobj tex, float4 sq);                          // CUBE projective
  772. fragment float3 f3texCUBE(uniform texobj tex, float4 sq);                          // CUBE projective
  773. fragment float4 f4texCUBE(uniform texobj tex, float4 sq);                          // CUBE projective
  774. fragment clampu  x1texCUBE(uniform texobj tex, float4 sq);                          // CUBE projective
  775. fragment clampu2 x2texCUBE(uniform texobj tex, float4 sq);                          // CUBE projective
  776. fragment clampu3 x3texCUBE(uniform texobj tex, float4 sq);                          // CUBE projective
  777. fragment clampu4 x4texCUBE(uniform texobj tex, float4 sq);                          // CUBE projective
  778.  
  779. fragment float  f1texCUBE(uniform texobj tex, float3 s, float3 dsdx, float3 dsdy); // CUBE non-proj, w/derivs
  780. fragment float2 f2texCUBE(uniform texobj tex, float3 s, float3 dsdx, float3 dsdy); // CUBE non-proj, w/derivs
  781. fragment float3 f3texCUBE(uniform texobj tex, float3 s, float3 dsdx, float3 dsdy); // CUBE non-proj, w/derivs
  782. fragment float4 f4texCUBE(uniform texobj tex, float3 s, float3 dsdx, float3 dsdy); // CUBE non-proj, w/derivs
  783. fragment clampu  x1texCUBE(uniform texobj tex, float3 s, float3 dsdx, float3 dsdy); // CUBE non-proj, w/derivs
  784. fragment clampu2 x2texCUBE(uniform texobj tex, float3 s, float3 dsdx, float3 dsdy); // CUBE non-proj, w/derivs
  785. fragment clampu3 x3texCUBE(uniform texobj tex, float3 s, float3 dsdx, float3 dsdy); // CUBE non-proj, w/derivs
  786. fragment clampu4 x4texCUBE(uniform texobj tex, float3 s, float3 dsdx, float3 dsdy); // CUBE non-proj, w/derivs
  787.  
  788. // Integrate operator.
  789. float3 integrate(float3 i);
  790.  
  791. // Unary operators
  792. // [claforte]  ++ and -- won't work until inputs are treated as variables.
  793. //float operator++(float input);
  794. //float operator--(float input);
  795. //useless operator: float operator+(float input);
  796. float operator-(float input);
  797.  
  798. //clampu operator++(clampu input);
  799. //clampu operator--(clampu input);
  800. //useless operator: clampu operator+(clampu input);
  801. //[claforte] uncomment this once clampu literals are supported.
  802. //clampu operator-(clampu input)
  803. //{
  804. //    return 0;
  805. //}
  806. clampu operator-(clampu input);
  807.  
  808. bool operator!(bool input);
  809.  
  810. // Linear interpolator
  811.  
  812. float4 lerp (float4 a, float4 b, float afrac)
  813. {
  814.     return afrac * a + (1 - afrac) * b;
  815. }
  816.  
  817. // Bilinear interpolator.
  818. float4 bilerp (float4 v00, float4 v01, float4 v10,
  819.            float4 v11, float frac0, float frac1)
  820. {
  821.     float4 v0 = lerp(v00, v01, frac0);
  822.     float4 v1 = lerp(v10, v11, frac0);
  823.     return lerp(v0, v1, frac1);
  824. }
  825.  
  826.  
  827.  
  828. // TESTS
  829. //
  830. bool test1(clampu a, clampu b, float c, float d)
  831. {
  832.     bool b1, b2;
  833.     b1 = b2 = a > b;
  834.     b2 = b1 && (c > d || b2);
  835.     return b1 || b2;
  836. }
  837.  
  838. bool test2(clampu a, clampu b, float c, float d)
  839. {
  840.     bool b1 = a*b > -(b+a) || b > a;
  841.     bool b2 = c <= d && !b1;
  842.     return !b2;
  843. }
  844.  
  845. void test3(float a, float b, out float o_a)
  846. {
  847.     o_a = a * b;
  848. }
  849.  
  850. void test4(float a, float b, out float o_a, out float o_b)
  851. {
  852.     o_a = a*b;
  853.     o_b = 3.1415926;
  854. }
  855.  
  856. clampu test5(clampu a, clampu b, clampu c)
  857. {
  858.     a += b;
  859.     a /= c + b;
  860.     a -= c + b;
  861.     a %= c + b;
  862.     a *= c + b;
  863.     b = c = a;
  864.     return c;
  865. }
  866.  
  867. float4 test6(float4 in)
  868. {
  869.     return in * { 0.0, 0, 1, -1.39 } / { 299292.2, -299292.2, 777, -888} / in;
  870. }
  871.  
  872. void test7(float in1, float in2, 
  873.            out float out1, out float out2)
  874. {
  875.    out1 = in1;
  876.    out2 = in2;
  877. }
  878.  
  879. float test8(float a, float b)
  880. {
  881.    float temp1;
  882.    float temp2;
  883.    test7(a, b, temp1, temp2);
  884.  
  885.    return temp1 * temp2;  
  886. }
  887.  
  888. float2 test9(float4 in1)
  889. {
  890.     return in1@xy;
  891. }
  892.  
  893. float3 test10(float3 in1)
  894. {
  895.     return in1 * 3.1415926@xxx;
  896. }
  897.  
  898. float4 test11()
  899. {
  900.     return {0,1,2,3}@abgr;
  901. }
  902.  
  903. float4 test12(uniform matrix4 modelview, uniform matrix4 projection, vertex float4 obj_pos)
  904. {
  905.     return projection * (modelview * obj_pos);
  906. }
  907.  
  908. fragment float3 bump(float3 geom_norm, float2 uv, uniform texobj texture); 
  909.  
  910. // generic light: acts as a place holder for actual lights.
  911. //light_shader 
  912. void generic_light(out float3 Lcol, out float3 Ldir,
  913.                  float3 surf_pos);
  914.  
  915. // Crappy point light. It has a position and a color, but no decay.
  916. //light_shader 
  917. void point_light_vertex(out vertex float3 Lcol, out vertex float3 Ldir,
  918.                  vertex float3 surf_pos, vertex float3 light_pos,
  919.                  uniform matrix4 transform,
  920.                  vertex float3 light_color, vertex float light_intensity,
  921.                  fragment float4 light_decay, vertex float depthBias,
  922.                  vertex float nearCP, vertex float farCP,
  923.                  vertex float depthMapSize, vertex float useDepthMapShadows)
  924. {
  925.     Lcol = light_color;
  926.     Ldir = normalize(surf_pos - light_pos);
  927.     // TODO: decay.
  928. }
  929.  
  930.  
  931. // Crappy spot light.
  932. void spot_light_vertex(out vertex float3 Lcol, out vertex float3 Ldir,
  933.                  vertex float3 surf_pos, uniform matrix4 transform,
  934.                  fragment float3 light_pos, 
  935.                  vertex float3 light_color, vertex float light_intensity,
  936.                  vertex float4 light_decay,
  937.                  vertex float light_exponent, vertex float light_cutOff,
  938.                  vertex float cone_angle, vertex float penumbra_angle,
  939.                  vertex float drop_off, vertex float depthBias,
  940.                  vertex float nearCP, vertex float farCP,
  941.                  vertex float depthMapSize, vertex float useDepthMapShadows,
  942.                  vertex float proj_tex, uniform texobj color_tex )
  943. {
  944.     Lcol = light_color;
  945.     Ldir = surf_pos;
  946.     // TODO.    Ldir = normalize(surf_pos - light_pos);
  947.     // TODO: decay.
  948. }
  949.  
  950. // Crappy directional light.
  951. void directional_light_vertex(out vertex float3 Lcol, out vertex float3 Ldir,
  952.                   vertex float3 surf_pos,  uniform matrix4 transform, 
  953.                   vertex float3 light_direction, vertex float3 light_color,
  954.                   vertex float light_intensity,
  955.                   vertex float depthBias,
  956.                   vertex float nearCP, vertex float farCP,
  957.                   vertex float depthMapSize, vertex float useDepthMapShadows)
  958. {
  959.     Lcol = light_color;
  960.     Ldir = surf_pos;
  961.     // TODO.    Ldir = normalize(surf_pos - light_pos);
  962.     // TODO: decay.
  963. }
  964.  
  965.  
  966. void point_light_fragment(out fragment float3 Lcol, out fragment float3 Ldir,
  967.                  fragment float3 surf_pos, fragment float3 light_pos,
  968.                  uniform matrix4 transform,
  969.                  fragment float3 light_color, vertex float light_intensity,
  970.                  fragment float4 light_decay, vertex float depthBias,
  971.                  vertex float nearCP, vertex float farCP,
  972.                  vertex float depthMapSize, vertex float useDepthMapShadows)
  973. {
  974.     Lcol = light_color;
  975.     Ldir = normalize(surf_pos - light_pos);
  976.     // TODO: decay.
  977. }
  978.  
  979. void directional_light_fragment(out vertex float3 Lcol, out vertex float3 Ldir,
  980.                   vertex float3 surf_pos,  uniform matrix4 transform, 
  981.                   vertex float3 light_direction, vertex float light_intensity,
  982.                   vertex float3 light_color,
  983.                   vertex float depthBias,
  984.                   vertex float nearCP, vertex float farCP,
  985.                   vertex float3 light_xyzRotation,
  986.                   vertex float depthMapSize, vertex float useDepthMapShadows)
  987. {
  988.     Lcol = light_color;
  989.     Ldir = surf_pos;
  990.     // TODO.    Ldir = normalize(surf_pos - light_pos);
  991.     // TODO: decay.
  992. }
  993.  
  994. void spot_light_fragment(out vertex float3 Lcol, out vertex float3 Ldir,
  995.                  vertex float3 surf_pos, uniform matrix4 transform,
  996.                  fragment float3 light_pos,
  997.                  vertex float3 light_color, vertex float light_intensity,
  998.                  vertex float4 light_decay,
  999.                  vertex float light_exponent, vertex float light_cutOff,
  1000.                  vertex float cone_angle, vertex float penumbra_angle,
  1001.                  vertex float drop_off, vertex float depthBias,
  1002.                  vertex float nearCP, vertex float farCP,
  1003.                  vertex float depthMapSize, vertex float useDepthMapShadows,
  1004.                  vertex float proj_tex, uniform texobj color_tex )
  1005. {
  1006.     Lcol = light_color;
  1007.     Ldir = surf_pos;
  1008.     // TODO.    Ldir = normalize(surf_pos - light_pos);
  1009.     // TODO: decay.
  1010. }
  1011.  
  1012. void ambient_light_vertex(out vertex float3 Lcol, out vertex float3 Ldir,
  1013.                 vertex float3    surf_pos,
  1014.                 vertex float3    light_pos,
  1015.                 uniform float3    light_color,
  1016.                 uniform float    light_intensity,
  1017.                 uniform float    ambient_shade)
  1018. {
  1019.     Lcol = light_color;
  1020.     Ldir = normalize(surf_pos - light_pos);
  1021. }
  1022.  
  1023. void ambient_light_fragment(out fragment float3 Lcol, out fragment float3 Ldir,
  1024.                 fragment float3    surf_pos,
  1025.                 fragment float3 light_pos,
  1026.                 uniform float3    light_color,
  1027.                 uniform float    light_intensity,
  1028.                 uniform float    ambient_shade)
  1029. {
  1030.     Lcol = light_color;
  1031.     Ldir = normalize(surf_pos - light_pos);
  1032. }
  1033.  
  1034. // TODO: reflect_uv should not have to be passed to parser when reflect_tex
  1035. //       arg is used.
  1036. void Maya_phong(out vertex float4 outHPOS, out fragment float3 outColor,
  1037.                 uniform matrix3 testmatrix,
  1038.                 vertex float3 surf_pos,
  1039.                 uniform texobj bump_tex, float2 bump_uv,
  1040.                 uniform texobj color_tex, float2 color_uv,
  1041.                 uniform texobj incan_tex, float2 incan_uv,
  1042.                 uniform texobj spec_exp_tex, float2 spec_exp_uv,
  1043.                 uniform texobj transp_tex, float2 transp_uv,
  1044.                 uniform texobj ambient_tex, float2 ambient_uv,
  1045.                 uniform texobj reflectivity_tex, float2 reflectivity_uv,
  1046.                 uniform texobj reflectedCol_tex, float2 reflectedCol_uv,
  1047.                 uniform texobj diffuse_tex, float2 diffuse_uv,
  1048.                 uniform float refractiveIndex)
  1049. {
  1050.     outHPOS = surf_pos@xxxx;
  1051.     outColor = surf_pos;
  1052. }